package com.xls.commonlibrary.util;

import android.content.Context;
import android.webkit.ValueCallback;

import com.hjq.permissions.OnPermissionCallback;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;
import com.hjq.toast.Toaster;

import java.util.List;

import io.reactivex.rxjava3.annotations.NonNull;

public class PermissionUtil {
    private static volatile PermissionUtil singleton = null;

    private PermissionUtil() {
    }

    public static PermissionUtil getInstance() {
        if (singleton == null) {
            synchronized (PermissionUtil.class) {
                if (singleton == null) {
                    singleton = new PermissionUtil();
                }
            }
        }
        return singleton;
    }


    ////////////////////////////////////////////////////

    public void getPermission(Context context, ValueCallback<String> callback) {
        XXPermissions.with(context)
                // 申请单个权限
//                .permission(Permission.RECORD_AUDIO)
                // 申请多个权限
//                .permission(Permission.Group.CALENDAR)
                //.permission(Permission.READ_MEDIA_IMAGES)// android 13 的权限适配 api 33
                .permission(Permission.READ_EXTERNAL_STORAGE)
                .permission(Permission.WRITE_EXTERNAL_STORAGE)
//                .permission(Permission.READ_PHONE_NUMBERS)
//                .permission(Permission.READ_PHONE_STATE)
                // 设置权限请求拦截器（局部设置）
                //.interceptor(new PermissionInterceptor())
                // 设置不触发错误检测机制（局部设置）
                //.unchecked()
                .request(new OnPermissionCallback() {

                    @Override
                    public void onGranted(@NonNull List<String> permissions, boolean allGranted) {
                        if (!allGranted) {
                            Toaster.show("获取部分权限成功，但部分权限未正常授予");
                            return;
                        }

                        //  toast("获取所有权限成功");

                        // todo 权限要全才行 事件传递跨Module用BR，eventbus貌似不大行
                        // 改为第三步去了
//                        checkUpdate();

                        if (null != callback) {
                            callback.onReceiveValue("ok");
                        }


                    }

                    @Override
                    public void onDenied(@NonNull List<String> permissions, boolean doNotAskAgain) {
                        if (doNotAskAgain) {
                            Toaster.show("被永久拒绝授权，请手动相关权限");
                            // todo 太强了 闭环，不开权限就进设置页面，自己打开吧，之前还得弹框提醒，业务流比下单还长了

                            // 如果是被永久拒绝就跳转到应用权限系统设置页面
                            XXPermissions.startPermissionActivity(context, permissions);
                        } else {
                            Toaster.show("获取必要权限失败");
                        }
                    }
                });
    }

}
